package org.example.gxpt.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.example.gxpt.common.properties.JwtProperties;
import org.example.gxpt.common.result.PageResult;
import org.example.gxpt.common.result.Result;
import org.example.gxpt.pojo.dto.*;
import org.example.gxpt.pojo.entity.InstrumentAdmin;
import org.example.gxpt.pojo.vo.InstrumentAdminLoginVO;
import org.example.gxpt.pojo.vo.InstrumentAdminQueryVO;
import org.example.gxpt.service.InstrumentAdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/instrumentAdmin")
@Slf4j
@Api(tags = "设备管理员相关接口")
@CrossOrigin
public class InstrumentAdminController {

    @Autowired
    private InstrumentAdminService instrumentAdminService;
    @Autowired
    private JwtProperties jwtProperties;

    //todo 从这里开始测试
    /**
     * 设备管理员登陆
     * @param loginDTO
     * @return
     */
    @PostMapping("/login ")
    @ApiOperation("设备管理员登录")
    public Result<InstrumentAdminLoginVO> instrumentAdminLogin(@RequestBody LoginDTO loginDTO){

        return Result.success(instrumentAdminService.login(loginDTO));
    }

    /**
     * 设备管理员注册
     * @param instrumentAdminDTO
     * @return
     */
    @PostMapping("/register")
    @ApiOperation("设备管理员注册")
    public Result instrumentAdminRegister(@RequestBody InstrumentAdminDTO instrumentAdminDTO){

        instrumentAdminService.save(instrumentAdminDTO);
        return Result.success();
    }

    /**
     * 查询所有设备管理员
     * @return
     */
    @GetMapping("listAll")
    @ApiOperation("查询所有设备管理员")
    public Result<List<InstrumentAdminQueryVO>> listAll(){
        return Result.success(instrumentAdminService.listAll());
    }

    /**
     * 设备管理员数据分页查询
     * @param instrumentAdminPageQueryDTO
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("设备管理员数据分页查询")
    public Result<PageResult> pageInstrumentAdmin(InstrumentAdminPageQueryDTO instrumentAdminPageQueryDTO){
        return Result.success(instrumentAdminService.pageQuery(instrumentAdminPageQueryDTO));
    }


    @DeleteMapping("/{id}")
    @ApiOperation("根据id删除设备管理员")
    public Result deleteInstrumentAdmin(@PathVariable Long id){
        instrumentAdminService.deleteById(id);
        return Result.success();
    }

    /**
     * 根据id查询设备管理员
     * @param
     * @return
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查询设备管理员")
    public Result<InstrumentAdmin> getInstrumentAdminById(@PathVariable Integer id){
        return Result.success(instrumentAdminService.getInstrumentAdminById(id));
    }

    /**
     * 根据id更新设备管理员数据
     * @param
     * @return
     */
    @PutMapping("/updateById")
    @ApiOperation("根据id更新设备管理员数据")
    public Result updateInstrumentAdminById(@RequestBody InstrumentAdminUpdateDTO instrumentAdminUpdateDTO){

        instrumentAdminService.updateById(instrumentAdminUpdateDTO);
        return Result.success();
    }

    @PutMapping("/updateByContext")
    @ApiOperation("修改当前登录用户的数据")
    public Result updateInstrumentAdminByContext(@RequestBody InstrumentAdminUpdateDTO instrumentAdminUpdateDTO){
        instrumentAdminService.updateByContext(instrumentAdminUpdateDTO);
        return Result.success();
    }

    @PutMapping("/updateStatus")
    @ApiOperation("设备管理员状态更新")
    public Result updateStatus(@RequestParam Long id, @RequestParam Integer status){
        instrumentAdminService.updateStatus(id, status);
        return Result.success();
    }

    @GetMapping("/logout")
    @ApiOperation("设备管理员退出登陆")
    public Result logout(){
        instrumentAdminService.logout();
        return Result.success();
    }
}
